Мета: Ознайомитися та засвоїти особливості роботи з потоками вводу/виводу та
написання програм для опрацювання потокових даних.
ТЕОРЕТИЧНІ ВІДОМОСТІ
Основні принципи роботи з потоками вводу/виводу
Одне з основних призначень дискової операційної системи (DOS) було забезпечити
доступ до дисків та файлів, які на них зберігаються. Перші версії DOS підтримували лише
файлову систему FAT. Дана файлова система оперує файлами та директоріями, які
можуть мати будь-яке ASCII символьне ім’я в форматі 8.3 (8 ASCII символів назви і 3
ASCII символи розширення розділені крапкою). Останні версії DOS забезпечують
підтримку також і VFAT – модифікації FAT, яка підтримує довгі імена (до 255 символів).
Кожен файл або директорія має байт атрибутів. Призначення бітів цього байту наступне:
біт 7: резервний і завжди має бути рівним 0;
біт 6: резервний і завжди має бути рівним 0;
біт 5: архівний (визначає чи елемент FAT підлягає архівуванню);
біт 4: директорія (вказує чи елемент FAT є файлом або директорією);
біт 3: мітка тому (спеціальний атрибут, який мають лише унікальні файли
нульового розміру в кореневій директорії, ім’я яких вважається міткою тому)
біт 2: системний
біт 1: прихований
біт 0: тільки для читання
При роботі з файлами і директоріями в запущеній на виконання програмі (процесі)
одночасно можуть бути відкритими кілька файлів. Для їх ідентифікації використовується
двохбайтний дескриптор файлу (ідентифікатор). Перші 5 дескрипторів зарезервовані за
стандартними потоками вводу/виводу. Стандартні потоки вводу/виводу в ОС - це потоки
процесу, що мають номер (дескриптор) і є зарезервовані для деякої «стандартної»
функціональності. Стандартними дескрипторами (ідентифікаторами) потоків і
відповідними їм назвами є:
0 : STDIN - стандартний потік вводу (зазвичай клавіатура);
1 : STDOUT - стандартний потік виводу (зазвичай екран);
2 : STDERR - стандартний потік помилок (завжди екран);
3 : AUX - потік послідовного порту (зазвичай СОМ1);
4 : PRN - потік паралельного порту (зазвичай LPT1).
Розглянемо відмінності між файлами та потоками. У системі вводу/виводу, яку
забезпечує DOS, підтримується єдиний інтерфейс, що не залежить від того, до якого
конкретного пристрою здійснюється доступ (за винятком пристроїв обмін даними з якими
відбувається лише за допомогою інструкцій IN та OUT). Тобто в цій системі між
програмою й пристроєм перебуває щось загальніше, ніж сам пристрій. Такий
узагальнений пристрій вводу або виводу (пристрій більше високого рівня абстракції)
називається потоком, у той час як конкретний пристрій називається файлом.
Файлова система DOS призначена для роботи із різними пристроями, у тому числі
терміналами, дисководами, дисками й накопичувачами на магнітній стрічці. Навіть якщо
якийсь пристрій сильно відрізняється від інших, буферизована файлова система
представить його у вигляді логічного пристрою, що називається потоком. Всі потоки
4
мають схожу поведінку. І тому, що вони в основному не залежать від фізичних пристроїв,
то та ж функція, що виконує запис у дисковий файл, може здійснювати запис і у інший
пристрій, наприклад, у консоль чи у пристрій, що підключений через COM порт.
Взаємодія потоків і файлів реалізується шляхом зв’язування потоку із певним
файлом виконанням операції відкривання файлу. Як тільки файл відкритий, можна
проводити обмін інформацією між ним і програмою.
Але не у всіх файлів однакові можливості. Наприклад, до дискового файлу прямий
доступ можливий, у той час як до деяких принтерів - ні. Таким чином, ми прийшли до
важливої особливості системи вводу/виводу DOS: всі потоки однакові, а файли - ні.
Якщо файл може підтримувати запити на місце розташування (покажчик поточної
позиції), то при відкритті такого файлу покажчик поточної позиції у файлі встановлюється
в початок. При читанні з файлу (або запису в нього) кожного символу покажчик поточної
позиції збільшується, забезпечуючи тим самим просування по файлі.
Файл від'єднується від певного потоку (тобто розривається зв'язок між файлом і
потоком) за допомогою операції зак...